// import { IMat4Like } from "cc";
// import { IVec3Like } from "cc";
// import { Vec3 } from "cc";

// Vec3.transformMat4 = function <Out extends IVec3Like>(out: Out, a: IVec3Like, m: IMat4Like): Out {
//     const x = a.x;
//     const y = a.y;
//     const z = a.z;
//     let rhw = m.m03 * x + m.m07 * y + m.m11 * z + m.m15;
//     rhw = rhw ? Math.abs(1 / rhw) : 1;
//     out.x = (m.m00 * x + m.m04 * y + m.m08 * z + m.m12) * rhw;
//     out.y = (m.m01 * x + m.m05 * y + m.m09 * z + m.m13) * rhw;
//     out.z = (m.m02 * x + m.m06 * y + m.m10 * z + m.m14) * rhw;
//     return out;
// }